package com.zjsru.plan2023.other;

import java.util.PriorityQueue;

/**
 * @Author: CookLee
 * @Date: 2023/7/2
 *
 * 最后一块石头的重量
 *
 * 输入：[2,7,4,1,8,1]
 * 输出：1
 * 解释：
 * 先选出 7 和 8，得到 1，所以数组转换为 [2,4,1,1,1]，
 * 再选出 2 和 4，得到 2，所以数组转换为 [2,1,1,1]，
 * 接着是 2 和 1，得到 1，所以数组转换为 [1,1,1]，
 * 最后选出 1 和 1，得到 0，最终数组转换为 [1]，这就是最后剩下那块石头的重量。
 *
 *
 */
public class LastStoneWeight {
    
    /**
     * 最大堆
     *
     * @param stones 石头
     * @return int
     */
    public int lastStoneWeight(int[] stones) {
        PriorityQueue<Integer> queue = new PriorityQueue<>((a, b) -> b - a);
        for (int stone : stones) {
            queue.offer(stone);
        }
        while (queue.size() > 1) {
            Integer first = queue.poll();
            Integer second = queue.poll();
            if (first > second) {
                int ans = first - second;
                queue.offer(ans);
            }
        }
        return queue.isEmpty() ? 0 : queue.poll();
    }
    
    public static void main(String[] args) {
        LastStoneWeight lastStoneWeight = new LastStoneWeight();
        int[] stones = new int[] {2, 7, 4, 1, 8, 1};
        System.out.println(lastStoneWeight.lastStoneWeight(stones));
    }
}
